* this do-file cleans the catastro raw data
********************************************************************************
* prelims
********************************************************************************
{
	
clear all
set more off
cap log close

}
********************************************************************************
* cleaning phase 1 - convert tables to dta
********************************************************************************
{
	
** cities
* Barcelona - 08_900 - 08_900_U_2020-04-24
* Madrid - 28_900 - 28_900_U_2019-02-06
* Valencia - 46_900 - 46_900_U_2019-02-06
* Sevilla - 41_900 - 41_900_U_2019-02-06
* Zaragoza - 50_900 - 50_900_U_2019-02-06
* Murcia - 30_30 - 30_30_U_2019-02-06
* Palma Mallorca - 07_40 - 07_40_U_2019-02-06
* Las Palmas - 35_17 - 35_17_U_2019-02-06

local muncodes 08_900 28_900 46_900 41_900 50_900 30_30 07_40 35_17

foreach muncode in `muncodes' { 

display "NEXT MUNICIPALITY: `muncode'"


	if "`muncode'" == "08_900" {
		local date 2020-04-24
	}
	else if "`muncode'" != "08_900" {
		local date 2019-02-06
	}
	
display "`date'"

#d;
	import delimited "$orig/catastro/`muncode'_U_`date'.CAT", 
	delimiter("")
	encoding(ISO-8859-1) clear 
;
#d cr

* identify potentially problematic case
g problematic = 0
la var problematic "potentially problematic"

cap replace problematic = 1 if (v2!="")
cap replace problematic = 1 if (v3!="")
cap replace problematic = 1 if (v2!=.)
cap replace problematic = 1 if (v3!=.)

keep v1 problematic

* replacing special characters
replace v1 = subinstr(v1,"Ñ","N",.)
replace v1 = subinstr(v1,"Ç","C",.)
replace v1 = subinstr(v1,"Á","A",.)
replace v1 = subinstr(v1,"À","A",.)
replace v1 = subinstr(v1,"Ä","A",.)
replace v1 = subinstr(v1,"È","E",.)
replace v1 = subinstr(v1,"É","E",.)
replace v1 = subinstr(v1,"Í","I",.)
replace v1 = subinstr(v1,"Ó","O",.)
replace v1 = subinstr(v1,"Ò","O",.)
replace v1 = subinstr(v1,"Ö","O",.)
replace v1 = subinstr(v1,"Ú","U",.)
replace v1 = subinstr(v1,"Ù","U",.)
replace v1 = subinstr(v1,"Ü","U",.)
replace v1 = subinstr(v1,"ñ","n",.)
replace v1 = subinstr(v1,"ç","c",.)
replace v1 = subinstr(v1,"á","a",.)
replace v1 = subinstr(v1,"à","a",.)
replace v1 = subinstr(v1,"ä","a",.)
replace v1 = subinstr(v1,"è","e",.)
replace v1 = subinstr(v1,"é","e",.)
replace v1 = subinstr(v1,"í","i",.)
replace v1 = subinstr(v1,"ï","i",.)
replace v1 = subinstr(v1,"ó","o",.)
replace v1 = subinstr(v1,"ò","o",.)
replace v1 = subinstr(v1,"ö","o",.)
replace v1 = subinstr(v1,"ú","u",.)
replace v1 = subinstr(v1,"ù","u",.)
replace v1 = subinstr(v1,"ü","u",.)

g RegType = substr(v1,1,2)

	* 01: Registro de cabecera
	****************************************************************************
	{
preserve	

	keep if RegType == "01" 

g GEnentityType = substr(v1,3,1)
la var GEnentityType "Tipo de entidad generadora (G gerencia )"
g GEnentityCode = substr(v1,4,9)
la var GEnentityCode "Código de la entidad generadora del fichero − Gerencia del Catastro: Código de la Delegación MEH 2 dígitos, siete blancos)"
g GEnentityName = substr(v1,13,27)
la var GEnentityName "Nombre de la entidad generadora"
g FileGenDate = substr(v1,40,8)
la var FileGenDate "Fecha de generación del fichero (formato (AAAAMMDD)"
g FileTime = substr(v1,48,8)
la var FileTime "Hora de generación del fichero (formato HHMMSS)"
g FileType = substr(v1,54,4)
la var FileType "Tipo de fichero: CCAT Información de Catastro (FINCA)"
g FileDesc = substr(v1,58,39)
la var FileDesc "Descripción del contenido del fichero"
g FileName = substr(v1,97,21)
la var FileName "Nombre del fichero (Cumplimentado por la DGC)"
g FileCodeEnt = substr(v1,118,3)
la var FileCodeEnt "Código de la entidad destinataria (Cumplimentado por la DGC)"
g PStart = substr(v1,121,8)
la var PStart "Fecha de inicio del periodo (AAAAMMDD)"
g PEnd = substr(v1,129,8)
la var PEnd "Fecha de finalización del periodo (AAAAMMDD)"
	
qui describe, varlist
local vars `r(varlist)'
local vardrop problematic
local listvars: list vars - vardrop
foreach var in `listvars' {
	replace `var' = ustrregexra(`var',"[\n\r\t]"," ")
	replace `var' = strtrim(`var')

}

drop v1
compress
save "$data/temp/`muncode'_reg_01.dta", replace
	
restore
	}
	* 11: Registro de Finca
	****************************************************************************
	{
preserve	

	keep if RegType == "11" 

g MEHCode = substr(v1,24,2)
la var MEHCode "Código de Delegación del MEH"
g MunCodeDGC = substr(v1,26,3)
la var MunCodeDGC "Código del Municipio (según DGC)"
g UCType = substr(v1,29,2)
la var UCType "Intencionadamente en blanco, excepto para bienes inmuebles de características especiales (valor BI)"
g PlotCode = substr(v1,31,14)
la var PlotCode "Parcela catastral"
g ProvCode = substr(v1,51,2)
la var ProvCode "Código de Provincia (INE)"
g ProvName = substr(v1,53,25)
la var ProvName "Nombre Provincia"
g MunCodeDGC2 = substr(v1,78,3)
la var MunCodeDGC2 "Código del Municipio (DGC)"
g MunCodeINE = substr(v1,81,3)
la var MunCodeINE "Código de Municipio (INE). Excluido el último dígito de control"
g MunName = substr(v1,84,40)
la var MunName "Nombre del Municipio"
g MunName2 = substr(v1,124,30)
la var MunName2 "Nombre de la entidad menor, en caso de existir"
g StreetCode = substr(v1,154,5)
la var StreetCode "Código de vía pública (DGC)"
g StreetType = substr(v1,159,5)
la var StreetType "Tipo de vía o sigla pública"
g StreetName = substr(v1,164,25)
la var StreetName "Nombre de la vía pública"
g StreetNum1 = substr(v1,189,4)
la var StreetNum1 "Primer número de policía"
g StreetLetter1 = substr(v1,193,1)
la var StreetLetter1 "Primera letra. (Carácter de duplicado)"
g StreetNum2 = substr(v1,194,4)
la var StreetNum2 "Segundo número de policía"
g StreetLetter2 = substr(v1,198,1)
la var StreetLetter2 "Segunda letra. (Carácter de duplicado)"
g Km = substr(v1,199,5)
la var Km "Kilómetro (expresado con tres enteros y dos decimales)"
g Block = substr(v1,204,4)
la var Block "Bloque"
g AddressNS = substr(v1,216,25)
la var AddressNS "Texto de dirección no estructurada"
g ZIPCode = substr(v1,241,5)
la var ZIPCode "Código postal"
g MunDistrict = substr(v1,246,2)
la var MunDistrict "Distrito municipal"
g OrigMunCode = substr(v1,248,3)
la var OrigMunCode "Código del municipio origen en caso de agregación (DGC)"
g ConcZoneCode = substr(v1,251,2)
la var ConcZoneCode "Código de la zona de concentración"
g IndEstCode = substr(v1,253,3)
la var IndEstCode "Código de polígono"
g ParcelaCode = substr(v1,256,5)
la var ParcelaCode "Código de parcela"
g PlaceCode = substr(v1,261,5)
la var PlaceCode "Código del paraje (DGC)"
g PlaceName = substr(v1,266,30)
la var PlaceName "Nombre del paraje"
g PlotSqm = substr(v1,296,19)
la var PlotSqm "Superficie de la finca o parcela catastral (en metros cuadrados)"
g TotalSqm = substr(v1,306,7)
la var TotalSqm "Superficie construida total. Será igual a la suma de las superficies de los elementos constructivos de la finca (incluida la que corresponde imputar de sus porches y terrazas)"
g UpperGroundSurf = substr(v1,313,7)
la var UpperGroundSurf "Superficie construida sobre rasante"
g LowGroundSurf = substr(v1,320,7)
la var LowGroundSurf "Superficie construida bajo rasante"
g CoveredSurf = substr(v1,327,7)
la var CoveredSurf "Superficie cubierta"
g XCoord = substr(v1,334,9)
la var XCoord "Coordenada X (con dos decimales sin separador)"
g YCoord = substr(v1,343,10)
la var YCoord "Coordenada Y (con dos decimales sin separador)"
g BICERef = substr(v1,582,20)
la var BICERef "Referencia Catastral BICE al que pertenece la finca"
g BICEDen = substr(v1,602,65)
la var BICEDen "Denominación del BICE al que pertenece la finca"
g SRS = substr(v1,667,10)
la var SRS "Huso geográfico SRS (Spatial Reference System), según nomenclatura definida en www.epsg.org."

qui describe, varlist
local vars `r(varlist)'
local vardrop problematic
local listvars: list vars - vardrop
foreach var in `listvars' {
	replace `var' = ustrregexra(`var',"[\n\r\t]"," ")
	replace `var' = strtrim(`var')

}

drop v1
compress
save "$data/temp/`muncode'_reg_11.dta", replace
	
restore
	}
	* 13: Registro de Unidad Constructiva
	****************************************************************************
	{
preserve	

	keep if RegType == "13" 
		
g MEHCode = substr(v1,24,2)
la var MEHCode "Código de Delegación del MEH"
g MunCodeDGC = substr(v1,26,3)
la var MunCodeDGC "Código del Municipio (según DGC)"
g UCType = substr(v1,29,2)
la var UCType "Clase de la Unidad Constructiva (UR, RU, BI)"
g PlotCode = substr(v1,31,14)
la var PlotCode "Parcela catastral"
g UCCode = substr(v1,45,4)
la var UCCode "Código de la Unidad Constructiva"
g ProvCode = substr(v1,51,2)
la var ProvCode "Código de Provincia (INE)"
g ProvName = substr(v1,53,25)
la var ProvName "Nombre Provincia"
g MunCodeDGC2 = substr(v1,78,3)
la var MunCodeDGC2 "Código del Municipio (DGC)"
g MunCodeINE = substr(v1,81,3)
la var MunCodeINE "Código de Municipio (INE). Excluido el último dígito de control"
g MunName = substr(v1,84,40)
la var MunName "Nombre del Municipio"
g MunName2 = substr(v1,124,30)
la var MunName2 "Nombre de la entidad menor, en caso de existir"
g StreetCode = substr(v1,154,5)
la var StreetCode "Código de vía pública (DGC)"
g StreetType = substr(v1,159,5)
la var StreetType "Tipo de vía o sigla pública"
g StreetName = substr(v1,164,25)
la var StreetName "Nombre de la vía pública"
g StreetNum1 = substr(v1,189,4)
la var StreetNum1 "Primer número de policía"
g StreetLetter1 = substr(v1,193,1)
la var StreetLetter1 "Primera letra. (Carácter de duplicado)"
g StreetNum2 = substr(v1,194,4)
la var StreetNum2 "Segundo número de policía"
g StreetLetter2 = substr(v1,198,1)
la var StreetLetter2 "Segunda letra. (Carácter de duplicado)"
g Km = substr(v1,199,5)
la var Km "Kilómetro (expresado con tres enteros y dos decimales)"
g AddressNS = substr(v1,216,25)
la var AddressNS "Texto de dirección no estructurada"
		
g YearConst = substr(v1,296,4)
la var YearConst "Año de la construcción"
g YearConstAcc = substr(v1,300,1)
la var YearConstAcc "Indicador de exactitud del año de construcción ('E', '+', '-', 'C')"
g SurfaceSqm = substr(v1,301,7)
la var SurfaceSqm "Superficie de suelo ocupada por la Unidad Constructiva en metros cuadrados"
g FacadeLong = substr(v1,308,5)
la var FacadeLong "Longitud de fachada (en centímetros). Campo cumplimentado si la UC simboliza edificio, o en el caso de la UC matriz de las divisiones instrumentales dentro del edificio."
		
g MainBldngCode = substr(v1,410,4)
la var MainBldngCode "Código de la Unidad Constructiva Matriz"

qui describe, varlist
local vars `r(varlist)'
local vardrop problematic
local listvars: list vars - vardrop
foreach var in `listvars' {
	replace `var' = ustrregexra(`var',"[\n\r\t]"," ")
	replace `var' = strtrim(`var')

}

drop v1
compress
save "$data/temp/`muncode'_reg_13.dta", replace

restore
	}
	* 14: Registro de Construcción
	****************************************************************************
	{
preserve	
	keep if RegType == "14" 

g MEHCode = substr(v1,24,2)
la var MEHCode "Código de Delegación del MEH"
g MunCodeDGC = substr(v1,26,3)
la var MunCodeDGC "Código del Municipio (según DGC)"
g PlotCode = substr(v1,31,14)
la var PlotCode "Parcela catastral"
g UCOrder = substr(v1,45,4)
la var UCOrder "Número de orden del elemento de construcción"
g PropOrder = substr(v1,51,4)
la var PropOrder "Número de orden del bien inmueble fiscal (Número del Cargo al que se imputa el valor de la construcción dentro de la parcela catastral)."
g UCCode = substr(v1,55,4)
la var UCCode "Código de la Unidad Constructiva a la que está asociado el local."
g Block = substr(v1,59,4)
la var Block "Bloque"
g Escalera = substr(v1,63,2)
la var Escalera "Escalera"
g Floor = substr(v1,65,3)
la var Floor "Escalera"
g Door = substr(v1,68,3)
la var Door "Puerta"
g DestCodeDGC = substr(v1,71,3)
la var DestCodeDGC "Código de Destino según codificación establecida por la DGC"
g ReformType = substr(v1,74,1)
la var ReformType "Indicador del tipo de reforma o rehabilitación, en caso de existir, a efectos del cálculo del coeficiente corrector por antigüedad (Valores posibles R/O/E/I o blanco)"
g ReformYear = substr(v1,75,4)
la var ReformYear "Año de reforma en caso de existir"
g AntiquityYear = substr(v1,79,4)
la var AntiquityYear "Año de antigüedad efectiva en Catastro (Para la obtención del valor catastral)"
g InteriorUC = substr(v1,83,1)
la var InteriorUC "Indicador de local interior (S/N)"
g UCSqm = substr(v1,84,7)
la var UCSqm "Superficie total del local a efectos de catastro, incluida la que corresponda imputar de porches y terrazas (en metros cuadrados)"
g TerraceSqm = substr(v1,91,7)
la var TerraceSqm "Superficie de porches y terrazas del local (en metros cuadrados), a título informativo"
g OtherFloorsSqm = substr(v1,98,7)
la var OtherFloorsSqm "Superficie imputable al local situada en otras plantas (en metros cuadrados)"
g UCType2 = substr(v1,105,5)
la var UCType2 "Tipología constructiva según Normas Técnicas de Valoración"
g DivisionCode = substr(v1,112,3)
#d;
la var DivisionCode "Código de modalidad de reparto, que se informará solamente 
si el elemento constructivo es elemento común. La composición del código es la siguiente: 
Primer carácter: a todos o a alguno (T/A), segundo carácter: a locales o a cargos (L/C), 
tercer carácter: proporción del reparto, por partes iguales, por superficie de los locales, 
por coeficientes de propiedad, o por coeficientes específicamente determinados (1/2/3/4)"
;
#d cr

qui describe, varlist
local vars `r(varlist)'
local vardrop problematic
local listvars: list vars - vardrop
foreach var in `listvars' {
	replace `var' = ustrregexra(`var',"[\n\r\t]"," ")
	replace `var' = strtrim(`var')

}

drop v1
compress
save "$data/temp/`muncode'_reg_14.dta", replace
	
restore
	}
	* 15: Registro de Inmueble
	****************************************************************************
	{
preserve	
	keep if RegType == "15" 

g MEHCode = substr(v1,24,2)
la var MEHCode "Código de Delegación del MEH"
g MunCodeDGC = substr(v1,26,3)
la var MunCodeDGC "Código del Municipio (según DGC)"
g PlotCode = substr(v1,31,14)
la var PlotCode "Parcela catastral"
g PropOrder = substr(v1,45,4)
la var PropOrder "Número secuencial del bien inmueble (Número de Cargo) dentro de la parcela catastral"
g ControlDigit1 = substr(v1,49,1)
la var ControlDigit1 "Primer carácter de control"
g ControlDigit2 = substr(v1,50,1)
la var ControlDigit2 "Segundo carácter de control"
g PropFixNum = substr(v1,51,8)
la var PropFixNum "Número fijo del Bien Inmueble (asignado por la Gerencia del Catastro)"
g PropCode1 = substr(v1,59,15)
la var PropCode1 "Campo para la identificación del Bien Inmueble asignado por el Ayuntamiento"
g PropCode2 = substr(v1,74,19)
la var PropCode2 "Número de finca registral, incluyendo registro de la propiedad (Registro de la propiedad 5 dígitos, sección 2 dígitos, número finca 6 dígitos, subfinca 6 dígitos)"
g ProvCode = substr(v1,93,2)
la var ProvCode "Código de Provincia (INE)"
g ProvName = substr(v1,95,25)
la var ProvName "Nombre Provincia"
g MunCodeDGC2 = substr(v1,120,3)
la var MunCodeDGC2 "Código del Municipio (DGC)"
g MunCodeINE = substr(v1,123,3)
la var MunCodeINE "Código de Municipio (INE). Excluido el último dígito de control"
g MunName = substr(v1,126,40)
la var MunName "Nombre del Municipio"
g MunName2 = substr(v1,166,30)
la var MunName2 "Nombre de la entidad menor, en caso de existir"
g StreetCode = substr(v1,196,5)
la var StreetCode "Código de vía pública (DGC)"
g StreetType = substr(v1,201,5)
la var StreetType "Tipo de vía o sigla pública"
g StreetName = substr(v1,206,25)
la var StreetName "Nombre de la vía pública"
g StreetNum1 = substr(v1,231,4)
la var StreetNum1 "Primer número de policía"
g StreetLetter1 = substr(v1,235,1)
la var StreetLetter1 "Primera letra. (Carácter de duplicado)"
g StreetNum2 = substr(v1,236,4)
la var StreetNum2 "Segundo número de policía"
g StreetLetter2 = substr(v1,240,1)
la var StreetLetter2 "Segunda letra. (Carácter de duplicado)"
g Km = substr(v1,241,5)
la var Km "Kilómetro (expresado con tres enteros y dos decimales)"
g Block = substr(v1,246,4)
la var Block "Bloque"
g Escalera = substr(v1,250,2)
la var Escalera "Escalera"
g Floor = substr(v1,252,3)
la var Floor "Escalera"
g Door = substr(v1,255,3)
la var Door "Puerta"
g AddressNS = substr(v1,258,25)
la var AddressNS "Texto de dirección no estructurada"
g ZIPCode = substr(v1,283,5)
la var ZIPCode "Código postal"
g MunDistrict = substr(v1,288,2)
la var MunDistrict "Distrito municipal"
g OrigMunCode = substr(v1,290,3)
la var OrigMunCode "Código del municipio origen en caso de agregación (DGC)"
g ConcZoneCode = substr(v1,293,2)
la var ConcZoneCode "Código de la zona de concentración"
g IndEstCode = substr(v1,295,3)
la var IndEstCode "Código de polígono"
g ParcelaCode = substr(v1,298,5)
la var ParcelaCode "Código de parcela"
g PlaceCode = substr(v1,303,5)
la var PlaceCode "Código del paraje (DGC)"
g PlaceName = substr(v1,308,30)
la var PlaceName "Nombre del paraje"
g PropOrder2 = substr(v1,368,4)
la var PropOrder2 "Número de orden del inmueble en la escritura de división horizontal"
g PropYear = substr(v1,372,4)
la var PropYear "Año de antigüedad del bien inmueble"
g PropType = substr(v1,428,1)
la var PropType "Clave de grupo de los bienes inmuebles de características especiales, o de uso de los bienes urbanos"
g PropSqm = substr(v1,442,10)
la var PropSqm "Superficie del elemento o elementos constructivos asociados al inmueble en el caso de fincas construidas (en metros cuadrados)"
g PropSqm2 = substr(v1,452,10)
la var PropSqm2 "Superficie asociada al inmueble, en el caso de solares, fincas construidas sin división horizontal o parcelas rústicas (en metros cuadrados)"
g PropShrInPlot = substr(v1,462,9)
la var PropShrInPlot "Coeficiente de propiedad respecto a la finca, en caso de división horizontal, expresado con tres enteros y seis decimales"

qui describe, varlist
local vars `r(varlist)'
local vardrop problematic
local listvars: list vars - vardrop
foreach var in `listvars' {
	replace `var' = ustrregexra(`var',"[\n\r\t]"," ")
	replace `var' = strtrim(`var')

}

drop v1
compress
save "$data/temp/`muncode'_reg_15.dta", replace

restore
	}
	* 16: Registro de reparto de elementos comunes
	****************************************************************************
	{
preserve	
	keep if RegType == "16" 

g MEHCode = substr(v1,24,2)
la var MEHCode "Código de Delegación del MEH"
g MunCodeDGC = substr(v1,26,3)
la var MunCodeDGC "Código del Municipio (según DGC)"
g PlotCode = substr(v1,31,14)
la var PlotCode "Parcela catastral"
g UCOrder = substr(v1,45,4)
la var UCOrder "Número de orden del elemento de construcción"
g SubPlotType = substr(v1,49,2)
la var SubPlotType "Calificación catastral de la subparcela a repartir (empleada en subparcelas abstractas)"
g RegOrder = substr(v1,51,4)
la var RegOrder "Número de orden del registro o segmento de repartos"		
g ConstNumber = substr(v1,55,4)
la var ConstNumber "Número del cargo o construcción al que se reparte el elemento común"
g ConstShr = substr(v1,59,6)
la var ConstShr "Porcentaje de reparto en los casos AL4 y AC4 (tres enteros y tres decimales)"
qui describe, varlist
local vars `r(varlist)'
local vardrop problematic
local listvars: list vars - vardrop
foreach var in `listvars' {
	replace `var' = ustrregexra(`var',"[\n\r\t]"," ")
	replace `var' = strtrim(`var')

}

drop v1
compress
save "$data/temp/`muncode'_reg_16.dta", replace
	
restore
	}
	* 17: Registro de cultivos
	****************************************************************************
	{
preserve	
	keep if RegType == "17" 

g MEHCode = substr(v1,24,2)
la var MEHCode "Código de Delegación del MEH"
g MunCodeDGC = substr(v1,26,3)
la var MunCodeDGC "Código del Municipio (según DGC)"
g PlotType = substr(v1,29,2)
la var PlotType "Naturaleza del suelo ocupado por el cultivo (UR urbana, RU rústica)"
g PlotCode = substr(v1,31,14)
la var PlotCode "Parcela catastral"
g SubPlotCode = substr(v1,45,4)
la var SubPlotCode "Código de la subparcela"
g PropOrder = substr(v1,51,4)
la var PropOrder "Número de orden del bien inmueble fiscal (Número del Cargo al que se imputa el valor del cultivo dentro de la parcela catastral)."
g SubPlotType = substr(v1,55,1)
la var SubPlotType "Tipo de subparcela ( T terreno, A abstracta, D dominio público)"
g SubPlotSqm = substr(v1,56,10)
la var SubPlotSqm "Superficie de la subparcela expresada en m2 (centiáreas)"
g CropType = substr(v1,66,2)
la var CropType "Calificación catastral/clase de cultivo"
g CropName = substr(v1,68,40)
la var CropName "Denominación de la clase de cultivo"
g CropIntensity = substr(v1,108,2)
la var CropIntensity "Intensidad productiva"
g CropDivisionCode = substr(v1,127,3)
la var CropDivisionCode "Código de modalidad de reparto, que se informará solamente si el cultivo es elemento común."

qui describe, varlist
local vars `r(varlist)'
local vardrop problematic
local listvars: list vars - vardrop
foreach var in `listvars' {
	replace `var' = ustrregexra(`var',"[\n\r\t]"," ")
	replace `var' = strtrim(`var')

}

drop v1
compress
save "$data/temp/`muncode'_reg_17.dta", replace
	
restore
	}
	* 90: Registro de cola. Existirá uno para todo el fichero
	****************************************************************************
	{
preserve	
	keep if RegType == "90" 

g RegType11 = substr(v1,10,7)
la var RegType11 "Número total de registros de tipo igual a 11 (Finca)"	
g RegType13 = substr(v1,24,7)
la var RegType13 "Número total de registros de tipo igual a 13 (Unidad Constructiva)"
g RegType14 = substr(v1,31,7)
la var RegType14 "Número total de registros de tipo igual a 14 (Construcción)"
g RegType15 = substr(v1,38,7)
la var RegType15 "Número total de registros de tipo igual a 15 (Bien Inmueble)"
g RegType16 = substr(v1,45,7)
la var RegType16 "Número total de registros de tipo igual a 16 (Reparto de elementos comunes)"
g RegType17 = substr(v1,52,7)
la var RegType17 "Número total de registros de tipo igual a 17 (Cultivos)"

qui describe, varlist
local vars `r(varlist)'
local vardrop problematic
local listvars: list vars - vardrop
foreach var in `listvars' {
	replace `var' = ustrregexra(`var',"[\n\r\t]"," ")
	replace `var' = strtrim(`var')

}

drop v1
compress
save "$data/temp/`muncode'_reg_90.dta", replace
	
restore

display "last muncode PHASE 1: `muncode'"


}
	}
}
********************************************************************************
* cleaning phase 2 - clean each table
********************************************************************************
{

local muncodes 08_900 28_900 46_900 41_900 50_900 30_30 07_40 35_17

	* cleaning phase 2
	****************************************************************************
* generate a unique file per municipality to be used
foreach muncode in `muncodes' {

** TABLE 14: REGISTRO DE CONSTRCCIÓN (ONE ROW PER FLOOR/COMMON ELEMENT)
use "$data/temp/`muncode'_reg_14.dta", clear

destring UCSqm ReformYear AntiquityYear, force replace

g QualConst = substr(UCType2,5,1)
replace QualConst="1" if (QualConst=="A"|QualConst=="B"|QualConst=="C")
destring QualConst, force replace
replace QualConst=. if QualConst==0

g x = QualConst * UCSqm
bys PlotCode PropOrder: egen x2 = sum(x)
bys PlotCode PropOrder: egen x3 = sum(UCSqm)
g MeanQualConst = x2 / x3
la var MeanQualConst "Mean Quality of Construction of Property"
drop x x2 x3 QualConst

g x = (regexm(UCType2,"^1011")==1)
bys PlotCode: egen HistMon = max(x)
la var HistMon "Historical Monument in PLOT"
drop x

g x=1
bys PlotCode PropOrder: egen NumConstEl = sum(x)
la var NumConstEl "Number of Construction Elements in the Property"
drop x

bys PlotCode PropOrder: egen t_SqmA = sum(UCSqm) if regexm(DestCodeDGC,"^A")==1 & regexm(DestCodeDGC,"^AES")==0
bys PlotCode PropOrder: egen t_SqmAES = sum(UCSqm) if regexm(DestCodeDGC,"^AES")==1 
bys PlotCode PropOrder: egen t_SqmB = sum(UCSqm) if regexm(DestCodeDGC,"^B")==1
bys PlotCode PropOrder: egen t_SqmC = sum(UCSqm) if regexm(DestCodeDGC,"^C")==1
bys PlotCode PropOrder: egen t_SqmE = sum(UCSqm) if regexm(DestCodeDGC,"^E")==1
bys PlotCode PropOrder: egen t_SqmGC = sum(UCSqm) if regexm(DestCodeDGC,"^GC")==1
bys PlotCode PropOrder: egen t_SqmGH = sum(UCSqm) if (DestCodeDGC=="G"|regexm(DestCodeDGC,"^GH")==1|regexm(DestCodeDGC,"^GS")==1)
bys PlotCode PropOrder: egen t_SqmGR = sum(UCSqm) if regexm(DestCodeDGC,"^GR")==1
bys PlotCode PropOrder: egen t_SqmI = sum(UCSqm) if regexm(DestCodeDGC,"^I")==1
bys PlotCode PropOrder: egen t_SqmK = sum(UCSqm) if regexm(DestCodeDGC,"^K")==1
bys PlotCode PropOrder: egen t_SqmM = sum(UCSqm) if regexm(DestCodeDGC,"^M")==1
bys PlotCode PropOrder: egen t_SqmO = sum(UCSqm) if regexm(DestCodeDGC,"^O")==1
bys PlotCode PropOrder: egen t_SqmP = sum(UCSqm) if regexm(DestCodeDGC,"^P")==1
bys PlotCode PropOrder: egen t_SqmR = sum(UCSqm) if regexm(DestCodeDGC,"^R")==1
bys PlotCode PropOrder: egen t_SqmT = sum(UCSqm) if regexm(DestCodeDGC,"^T")==1
bys PlotCode PropOrder: egen t_SqmV = sum(UCSqm) if regexm(DestCodeDGC,"^V")==1
bys PlotCode PropOrder: egen t_SqmYH = sum(UCSqm) if (regexm(DestCodeDGC,"^YH")==1|DestCodeDGC=="YAM"|DestCodeDGC=="YCL")
bys PlotCode PropOrder: egen t_SqmY = sum(UCSqm) if (regexm(DestCodeDGC,"^Y")==1&regexm(DestCodeDGC,"^YH")==0&DestCodeDGC!="YAM"&DestCodeDGC!="YCL")
bys PlotCode PropOrder: egen t_SqmZ = sum(UCSqm) if regexm(DestCodeDGC,"^Z")==1

* generate clean version
local categories A AES B C E GC GH GR I K M O P R T V YH Y Z
foreach category in `categories' {

	bys PlotCode PropOrder: egen Sqm`category' = mean(t_Sqm`category')
	drop t_Sqm`category'
	replace Sqm`category'=0 if Sqm`category'==.

}

la var SqmA "Sqm to Almacenamiento or Parking (A, AA, AAP, AAV) in PROPERTY"
la var SqmAES "Sqm to Estaciones (AES)"
la var SqmB "Sqm to Caseta Riego, trans or Ins. gnaderas (BCR, BCT, BIG) in PROPERTY"
la var SqmC "Sqm to Comercios (C, CAT, CBZ, CCE, CCL, CCR, CDM...) in PROPERTY"
la var SqmE "Sqm to Educación (E, EBL, EBS, ECL, EIN...) in PROPERTY"
la var SqmGC "Sqm to Cafés (GC1,...,GC5) in PROPERTY"
la var SqmGH "Sqm to Hotels/Hostals (G,GH1,...,GH5) in PROPERTY"
la var SqmGR "Sqm to Restaurantes (GR1,...,GR5) in PROPERTY"
la var SqmI "Sqm to Industria (I,IAG,...) in PROPERTY"
la var SqmK "Sqm to Deportes (K) in PROPERTY"
la var SqmM "Sqm to Suelo sin edificar (M) in PROPERTY"
la var SqmO "Sqm to Oficinas (O...) in PROPERTY"
la var SqmP "Sqm to Edificio Público (P,PAA,PAD,...) in PROPERTY"
la var SqmR "Sqm to Religioso (R,RBS, ...) in PROPERTY"
la var SqmT "Sqm to Espectáculos (T, TAD, ...) in PROPERTY"
la var SqmV "Sqm to Vivienda (V) in PROPERTY"
la var SqmYH "Sqm to Sanidad (YAM,YCL,YHG,YHS,...) in PROPERTY"
la var SqmY "Sqm to Otros Usos (Y, YCA,...) in PROPERTY"
la var SqmZ "Sqm to Agrarian (ZBE,...) in PROPERTY"

g x = UCSqm if PropOrder==""
bys PlotCode: egen SqmCommon = total(x)
la var SqmCommon "Sqm to Common Elements in PLOT"
drop x

duplicates drop PlotCode PropOrder UCCode, force

g x=1
bys PlotCode PropOrder: egen NumUCs = sum(x)
la var NumUCs "Number of Unidades Constructivas in PROPERTY"
drop x

* reforms?
g t_RefR = (ReformType=="R")
g t_RefO = (ReformType=="O")
g t_RefEI = (ReformType=="E"|ReformType=="I")
bys PlotCode PropOrder: egen RefR = max(t_RefR)
bys PlotCode PropOrder: egen RefO = max(t_RefO)
bys PlotCode PropOrder: egen RefEI = max(t_RefEI)
la var RefR "Comprehensive (R) Reform in the Property"
la var RefO "Total (O) Reform in the Property"
la var RefEI "Small Reform (E/I) in the Property"

g t_YearRefR = ReformYear if (ReformType=="R")
g t_YearRefO = ReformYear if (ReformType=="O")
g t_YearRefEI = ReformYear if (ReformType=="E"|ReformType=="I")
bys PlotCode PropOrder: egen LastYearRefR= max(t_YearRefR)
bys PlotCode PropOrder: egen FirstYearRefR = min(t_YearRefR)
bys PlotCode PropOrder: egen LastYearRefO= max(t_YearRefO)
bys PlotCode PropOrder: egen FirstYearRefO = min(t_YearRefO)
bys PlotCode PropOrder: egen LastYearRefEI = max(t_YearRefEI)
bys PlotCode PropOrder: egen FirstYearRefEI = min(t_YearRefEI)
drop t_*Ref*
la var LastYearRefR "Last Year of Comprehensive (R) Reform in Property"
la var FirstYearRefR "First Year of Comprehensive (R) Reform in Property"
la var LastYearRefO "Last Year of Total (O) Reform in Property"
la var FirstYearRefO "First Year of Total (O) Reform in Property"
la var LastYearRefEI "Last Year of Small (E/I) Reform in Property"
la var FirstYearRefEI "First Year of Small (E/I) Reform in Property"

* get oldest and newest UC within PlotCode-PropOrder
bys PlotCode PropOrder: egen AntiquityYearMin = min(AntiquityYear)
bys PlotCode PropOrder: egen AntiquityYearMax = max(AntiquityYear)
la var AntiquityYearMin "Year of Construction of Oldest UC in Property"
la var AntiquityYearMax "Year of Construction of Newest UC in Property"

drop if PropOrder==""
merge m:m PlotCode UCCode using "$data/temp/`muncode'_reg_13.dta", keepusing(YearCons* Facade* MainBldngCode)
keep if _m==3
drop _m

* add info from table 15
drop UCOrder Block Escalera Floor Door DestCodeDGC
drop ReformType	ReformYear AntiquityYear TerraceSqm OtherFloor* UCSqm Interior* UCCode DivisionCode
duplicates drop PlotCode PropOrder, force
merge 1:m PlotCode PropOrder using "$data/temp/`muncode'_reg_15.dta"

g EmptyPlot = (_m==2)
la var EmptyPlot "Empty (or Agrarian) PLOT - codes M or Z"
drop _m
foreach var in NumConstEl NumUCs HistMon {
	replace `var' = 0 if EmptyPlot == 1
}
replace PropYear = "" if EmptyPlot == 1
replace PropShrInPlot = "" if EmptyPlot == 1

foreach category in `categories' Common {

	replace Sqm`category'=0 if EmptyPlot == 1

}

* ADD TABLE 11: REGISTRO DE FINCA
merge m:m PlotCode using "$data/temp/`muncode'_reg_11.dta", keepusing(XCoord YCoord SRS)
drop _merge

duplicates drop PlotCode PropOrder, force 
duplicates tag PlotCode PropFixNum PropOrder, g(dup)
egen x = sum(dup)
local duplicates = x[1]
drop x

*coordinates
foreach var in XCoord YCoord {

	destring `var', force replace
	replace `var' = `var'/100

}

#d;
la def PropType 
	1 "Almacén -Estacionamiento"
	2 "Residencial"
	3 "Industrial"
	4 "Oficians"
	5 "Comercial"
	6 "Deportivo"
	7 "Espectáculos"
	8 "Ocio y Hostelería"
	9 "Sanidad y Beneficiencia" /*includes schools*/
	10 "Cultural"
	11 "Religioso"
	12 "Obras de urbanización y jardinería, suelos sin edificar"
	13 "Edificio singular"
	14 "Almacén agrario"
	15 "Industrial agrario"
	16 "Agrario"
	;
#d cr

* generate new property type variable
g PropType2 = .
replace PropType2 = 1 if PropType == "A"
replace PropType2 = 2 if PropType == "V"
replace PropType2 = 3 if PropType == "I"
replace PropType2 = 4 if PropType == "O"
replace PropType2 = 5 if PropType == "C"
replace PropType2 = 6 if PropType == "K"
replace PropType2 = 7 if PropType == "T"
replace PropType2 = 8 if PropType == "G"
replace PropType2 = 9 if PropType == "Y"
replace PropType2 = 10 if PropType == "E"
replace PropType2 = 11 if PropType == "R"
replace PropType2 = 12 if PropType == "M"
replace PropType2 = 13 if PropType == "P"
replace PropType2 = 14 if PropType == "B"
replace PropType2 = 15 if PropType == "J"
replace PropType2 = 16 if PropType == "Z"

la val PropType2 PropType

* destring
local destringvars PropYear YearConst PropSqm PropSqm2 PropShrInPlot XCoord YCoord Facade*

foreach var in `destringvars' {
	destring `var', force replace
}

replace PropShrInPlot = PropShrInPlot/100000000

g House = (PropShrInPlot >= .99 & PropShrInPlot <= 1 & PropType == "V")
la var House "House"
g Apartment = (House != 1 & PropType == "V")
la var Apartment "Apartment"

* public facilities and businesses
g PubFacility = (PropType=="K"|PropType=="T"|PropType=="Y"|PropType=="E")
la var PubFacility "Public Facility: Sports/Spectacle/Health/Education/Museum"
g Business = (PropType=="O"|PropType=="C"|PropType=="G")
la var Business "Business: Firm/Bar/Retail"

drop PropType PropFixNum PropCode1 PropCode2 MunName2 ConcZoneCode OrigMunCode PropOrder2 RegType

#d;
	order MEHCode MunCodeDGC PlotCode PropOrder ProvCode ProvName MunCodeDGC2 
	MunCodeINE MunName StreetCode StreetType StreetName StreetNum1 StreetLetter1 
	StreetNum2 StreetLetter2 Km Block Escalera Floor Door AddressNS ZIPCode 
	MunDistrict IndEstCode ParcelaCode PlaceCode PlaceName XCoord YCoord SRS
	;
#d cr

	******************
	* no need to fix
	preserve
	drop if	NumConstEl >= 3 & (House==1|Apartment==1)
	destring PropOrder, g(PropOrder2)
	la var PropOrder2 "Property Order (modified): ends in 000 not modified"
	replace PropOrder2 = PropOrder2 * 1000
	compress
	save "$data/temp/`muncode'_nofix.dta", replace
	restore
	*****************

	*****************
	* to fix
	keep if	NumConstEl >= 3 & (House==1|Apartment==1)

	#d;
	drop PropSqm Block Escalera Floor Door UCType2 *Ref* Antiquity* MeanQual* Sqm* NumUCs
	PropSqm
		;
	#d cr
	
	local N = _N
	display "`N' to fix in `muncode'"
	
	if `N' == 0 {
		save "$data/temp/`muncode'_fixed.dta", replace
	}
	else if `N' > 0 {

	compress
	save "$data/temp/`muncode'_tofix.dta", replace
	*****************

* now fix
use "$data/temp/`muncode'_reg_14.dta", clear

merge m:1 PlotCode PropOrder using "$data/temp/`muncode'_tofix.dta"
keep if _m==3
drop _m

destring UCSqm ReformYear AntiquityYear, force replace

g UCTyp = substr(UCType2,1,4)
destring UCTyp, force replace
* identify construction types
g apt = (UCTyp < 120)
g house = (UCTyp > 120 & UCTyp < 200)
g shop = (UCTyp >= 400 & UCTyp < 500)
* houses and apartments - no parkings or warehouses
g x = (UCTyp < 200 & (UCTyp != 113 & UCTyp != 123))
bys PlotCode PropOrder: egen HUnCount = sum(x)
drop x

* some apts or houses in unit
sort PlotCode PropOrder UCOrder
bys PlotCode PropOrder: egen someapts = max(apt)
bys PlotCode PropOrder: egen somehouse = max(house)
bys PlotCode PropOrder: g singlehouse = 1 if somehouse==1 & NumConstEl < 10
bys PlotCode PropOrder: replace singlehouse = 1 if somehouse==1 & HUnCount < 5 & singlehouse==. 
replace singlehouse = . if HUnCount > 15 &  HUnCount!=.
drop HUnCount
bys PlotCode PropOrder: g othernotsplit = 1 if UCTyp > 500 & singlehouse!=1 & someapts!=1
replace singlehouse = 0 if singlehouse==. & somehouse==1

* update
replace House = 0 if someapts==1 
replace Apartment = 1 if someapts == 1
replace Business = 1 if (UCTyp >= 400 & UCTyp < 500)
replace PubFacility = 1 if (UCTyp >= 600 & UCTyp < 1100)
replace Apartment = 0 if Business==1|PubFacility==1
replace House = 0 if Business==1|PubFacility==1
replace Apartment = 0 if (UCTyp == 113 | UCTyp == 123)
replace House = 0 if (UCTyp == 113 | UCTyp == 123)
replace House=0 if (UCTyp>300 & UCTyp<400)|(UCTyp>500 & UCTyp<1100)
replace Apartment=0 if (UCTyp>300 & UCTyp<400)|(UCTyp>500 & UCTyp<1100)

* generate new proporder variable to reflect split
destring PropOrder, g(PropOrder2)
la var PropOrder2 "Property Order (modified): ends in 000 not modified"
replace PropOrder2 = PropOrder2 * 1000
bys PlotCode PropOrder: replace PropOrder2 = PropOrder2 + _n if singlehouse!=1 & othernotsplit!=1

* square meteres
bys PlotCode PropOrder2: egen PropSqm = sum(UCSqm)
la var PropSqm "Property Square Meters"

* quality
g QualConst = substr(UCType2,5,1)
replace QualConst="1" if (QualConst=="A"|QualConst=="B"|QualConst=="C")
destring QualConst, force replace
replace QualConst=. if QualConst==0

* weighted avg quality of property
g x = QualConst * UCSqm
bys PlotCode PropOrder2: egen x2 = sum(x)
bys PlotCode PropOrder2: egen x3 = sum(UCSqm)
g MeanQualConst = x2 / x3
la var MeanQualConst "Mean Quality of Construction of Property"
drop x x2 x3 QualConst

* Sqm to specific use
destring UCSqm, force replace
bys PlotCode PropOrder2: egen t_SqmA = sum(UCSqm) if regexm(DestCodeDGC,"^A")==1 & regexm(DestCodeDGC,"^AES")==0
bys PlotCode PropOrder2: egen t_SqmAES = sum(UCSqm) if regexm(DestCodeDGC,"^AES")==1 
bys PlotCode PropOrder2: egen t_SqmB = sum(UCSqm) if regexm(DestCodeDGC,"^B")==1
bys PlotCode PropOrder2: egen t_SqmC = sum(UCSqm) if regexm(DestCodeDGC,"^C")==1
bys PlotCode PropOrder2: egen t_SqmE = sum(UCSqm) if regexm(DestCodeDGC,"^E")==1
bys PlotCode PropOrder2: egen t_SqmGC = sum(UCSqm) if regexm(DestCodeDGC,"^GC")==1
bys PlotCode PropOrder2: egen t_SqmGH = sum(UCSqm) if (DestCodeDGC=="G"|regexm(DestCodeDGC,"^GH")==1|regexm(DestCodeDGC,"^GS")==1)
bys PlotCode PropOrder2: egen t_SqmGR = sum(UCSqm) if regexm(DestCodeDGC,"^GR")==1
bys PlotCode PropOrder2: egen t_SqmI = sum(UCSqm) if regexm(DestCodeDGC,"^I")==1
bys PlotCode PropOrder2: egen t_SqmK = sum(UCSqm) if regexm(DestCodeDGC,"^K")==1
bys PlotCode PropOrder2: egen t_SqmM = sum(UCSqm) if regexm(DestCodeDGC,"^M")==1
bys PlotCode PropOrder2: egen t_SqmO = sum(UCSqm) if regexm(DestCodeDGC,"^O")==1
bys PlotCode PropOrder2: egen t_SqmP = sum(UCSqm) if regexm(DestCodeDGC,"^P")==1
bys PlotCode PropOrder2: egen t_SqmR = sum(UCSqm) if regexm(DestCodeDGC,"^R")==1
bys PlotCode PropOrder2: egen t_SqmT = sum(UCSqm) if regexm(DestCodeDGC,"^T")==1
bys PlotCode PropOrder2: egen t_SqmV = sum(UCSqm) if regexm(DestCodeDGC,"^V")==1
bys PlotCode PropOrder2: egen t_SqmYH = sum(UCSqm) if (regexm(DestCodeDGC,"^YH")==1|DestCodeDGC=="YAM"|DestCodeDGC=="YCL")
bys PlotCode PropOrder2: egen t_SqmY = sum(UCSqm) if (regexm(DestCodeDGC,"^Y")==1&regexm(DestCodeDGC,"^YH")==0&DestCodeDGC!="YAM"&DestCodeDGC!="YCL")
bys PlotCode PropOrder2: egen t_SqmZ = sum(UCSqm) if regexm(DestCodeDGC,"^Z")==1

* generate clean version of variable
local categories A AES B C E GC GH GR I K M O P R T V YH Y Z
foreach category in `categories' {

	bys PlotCode PropOrder2: egen Sqm`category' = mean(t_Sqm`category')
	drop t_Sqm`category'
	replace Sqm`category'=0 if Sqm`category'==.

}

la var SqmA "Sqm to Almacenamiento or Parking (A, AA, AAP, AAV) in PROPERTY"
la var SqmAES "Sqm to Estaciones (AES)"
la var SqmB "Sqm to Caseta Riego, trans or Ins. gnaderas (BCR, BCT, BIG) in PROPERTY"
la var SqmC "Sqm to Comercios (C, CAT, CBZ, CCE, CCL, CCR, CDM...) in PROPERTY"
la var SqmE "Sqm to Educación (E, EBL, EBS, ECL, EIN...) in PROPERTY"
la var SqmGC "Sqm to Cafés (GC1,...,GC5) in PROPERTY"
la var SqmGH "Sqm to Hotels/Hostals (G,GH1,...,GH5) in PROPERTY"
la var SqmGR "Sqm to Restaurantes (GR1,...,GR5) in PROPERTY"
la var SqmI "Sqm to Industria (I,IAG,...) in PROPERTY"
la var SqmK "Sqm to Deportes (K) in PROPERTY"
la var SqmM "Sqm to Suelo sin edificar (M) in PROPERTY"
la var SqmO "Sqm to Oficinas (O...) in PROPERTY"
la var SqmP "Sqm to Edificio Público (P,PAA,PAD,...) in PROPERTY"
la var SqmR "Sqm to Religioso (R,RBS, ...) in PROPERTY"
la var SqmT "Sqm to Espectáculos (T, TAD, ...) in PROPERTY"
la var SqmV "Sqm to Vivienda (V) in PROPERTY"
la var SqmYH "Sqm to Sanidad (YAM,YCL,YHG,YHS,...) in PROPERTY"
la var SqmY "Sqm to Otros Usos (Y, YCA,...) in PROPERTY"
la var SqmZ "Sqm to Agrarian (ZBE,...) in PROPERTY"

g x = UCSqm if PropOrder==""
bys PlotCode: egen SqmCommon = total(x)
la var SqmCommon "Sqm to Common Elements in PLOT"
drop x

duplicates drop PlotCode PropOrder2 UCCode, force

g x=1
bys PlotCode PropOrder2: egen NumUCs = sum(x)
la var NumUCs "Number of Unidades Constructivas in PROPERTY"
drop x

* reforms
g t_RefR = (ReformType=="R")
g t_RefO = (ReformType=="O")
g t_RefEI = (ReformType=="E"|ReformType=="I")
bys PlotCode PropOrder2: egen RefR = max(t_RefR)
bys PlotCode PropOrder2: egen RefO = max(t_RefO)
bys PlotCode PropOrder2: egen RefEI = max(t_RefEI)
la var RefR "Comprehensive (R) Reform in the Property"
la var RefO "Total (O) Reform in the Property"
la var RefEI "Small Reform (E/I) in the Property"

g t_YearRefR = ReformYear if (ReformType=="R")
g t_YearRefO = ReformYear if (ReformType=="O")
g t_YearRefEI = ReformYear if (ReformType=="E"|ReformType=="I")
bys PlotCode PropOrder2: egen LastYearRefR= max(t_YearRefR)
bys PlotCode PropOrder2: egen FirstYearRefR = min(t_YearRefR)
bys PlotCode PropOrder2: egen LastYearRefO= max(t_YearRefO)
bys PlotCode PropOrder2: egen FirstYearRefO = min(t_YearRefO)
bys PlotCode PropOrder2: egen LastYearRefEI = max(t_YearRefEI)
bys PlotCode PropOrder2: egen FirstYearRefEI = min(t_YearRefEI)

drop t_*Ref*
la var LastYearRefR "Last Year of Comprehensive (R) Reform in Property"
la var FirstYearRefR "First Year of Comprehensive (R) Reform in Property"
la var LastYearRefO "Last Year of Total (O) Reform in Property"
la var FirstYearRefO "First Year of Total (O) Reform in Property"
la var LastYearRefEI "Last Year of Small (E/I) Reform in Property"
la var FirstYearRefEI "First Year of Small (E/I) Reform in Property"

bys PlotCode PropOrder2: egen AntiquityYearMin = min(AntiquityYear)
bys PlotCode PropOrder2: egen AntiquityYearMax = max(AntiquityYear)
la var AntiquityYearMin "Year of Construction of Oldest UC in Property"
la var AntiquityYearMax "Year of Construction of Newest UC in Property"

duplicates drop PlotCode PropOrder2, force

#d;
	drop InteriorUC UCSqm Terrace* OtherFloo* Division* apt house shop someapts somehouse
	singlehouse otherno* AntiquityYear UCOrder RegType UCCode DestCode*
	ReformYear
	;
#d cr

compress
save "$data/temp/`muncode'_fixed.dta", replace

	} 
	* merge back to catastro data
	****************************************************************************
clear

append using "$data/temp/`muncode'_nofix.dta"
append using "$data/temp/`muncode'_fixed.dta"


* minor adjustments 
replace House = 0 if House==1 & (SqmA+SqmC+SqmI+SqmK+SqmY)> SqmV*10
replace Apartment = 0 if Apartment==1 & (SqmA+SqmC+SqmI+SqmK+SqmY)> SqmV*25

* correct some zips
if "`muncode'" == "08_900" {
	
	destring ZIPCode, g(ZIP) force
	replace ZIP = . if ZIP == 0

	replace ZIP = 8041 if PlotCode=="1260938DF3816A"
	replace ZIP = 8016 if PlotCode=="1375552DF3817E"
	replace ZIP = 8019 if PlotCode=="4949413DF3844H"
	replace ZIP = 8019 if PlotCode=="4949420DF3844H"
	replace ZIP = 8028 if PlotCode=="7412313DF2871C"
	replace ZIP = 8028 if PlotCode=="7510519DF2871B"
	replace ZIP = 8023 if PlotCode=="8248311DF2884G"
	replace ZIP = 8035 if PlotCode=="8661839DF2886B"
	replace ZIP = 8012 if PlotCode=="9735712DF2839F"

	#d;
	replace ZIP = 8026 if 
	(PlotCode=="1450718DF3815A"|PlotCode=="1450719DF3815A"|PlotCode=="1450720DF3815A"
	|PlotCode=="1450721DF3815A"|PlotCode=="1450722DF3815A"|PlotCode=="1450725DF3815A"
	|PlotCode=="1450726DF3815A"|PlotCode=="1450727DF3815A"|PlotCode=="1450728DF3815A"
	|PlotCode=="1450729DF3815A"|PlotCode=="1450781DF3815A"|PlotCode=="1450782DF3815A"
	|PlotCode=="1450783DF3815A"|PlotCode=="1450793DF3815A")
	;
	#d cr

	replace ZIP = 8026 if PlotCode=="1548101DF3814H"
	replace ZIP = 8019 if (PlotCode=="4949435DF3844H"|PlotCode=="4949436DF3844H"|PlotCode=="4949448DF3844H")

	#d;
	replace ZIP = 8035 if (PlotCode=="7856215DF2875F"|PlotCode=="7956433DF2875F"|PlotCode=="7956434DF2875F"
	|PlotCode=="7956435DF2875F"|PlotCode=="7956436DF2875F"|PlotCode=="7956453DF2875F")
	;
	#d cr

	replace ZIP = 8038 if (PlotCode=="9105802DF2890E"|PlotCode=="9105803DF2890E")
	replace ZIP = 8035 if PlotCode=="9569422DF2896H"

	#d;
	replace ZIP = 8032 if 
	(PlotCode=="0068507DF3806G"|PlotCode=="0068507DF3806G"|PlotCode=="0068508DF3806G"
	|PlotCode=="0068509DF3806G"|PlotCode=="0068510DF3806G"|PlotCode=="0066609DF3806E"
	|PlotCode=="0066609DF3806E")
	;
	#d cr

	#d;
	replace ZIP = 8032 if 
	(PlotCode=="0467803DF3806E"|PlotCode=="0467804DF3806E"|PlotCode=="0467805DF3806E")
	;
	#d cr

	bys PlotCode: egen ZIPMode = mode(ZIP)

	replace ZIP = ZIPMode if (ZIP==. |ZIP<1000)

	tostring ZIP, replace force
	replace ZIP = "0" + ZIP if length(ZIP)==4
	replace ZIP = ZIPCode if ZIP=="."
	replace ZIPCode = ZIP
	drop ZIP ZIPMode
	
	replace Apartment = 1 if (House==0 & Apartment == 0 & PropType2 == 2 & SqmV > 10)
	
}

* store cleaned dataset
sort PlotCode PropOrder
compress
save "$data/int/`muncode'.dta", replace

* erase temp files
cap erase "$data/temp/`muncode'_nofix.dta"
cap erase "$data/temp/`muncode'_tofix.dta"
cap erase "$data/temp/`muncode'_fixed.dta"

} 

** smaller files to transfer to cluster/use in LNG computation
local muncodes 08_900 28_900 46_900 41_900 50_900 30_30 07_40 35_17

foreach muncode in `muncodes' {	

	use "$data/int/`muncode'.dta", clear
	keep PlotCode PropOrder2 PropSqm YearConst House Apartment
	compress
	save "$data/int/`muncode'_clus.dta", replace
	}
}
********************************************************************************
* erase temporary files
********************************************************************************
{
	
foreach muncode in $muncodes {

	cap erase "$data/temp/`muncode'_reg_01.dta"
	cap erase "$data/temp/`muncode'_reg_11.dta"
	cap erase "$data/temp/`muncode'_reg_13.dta"
	cap erase "$data/temp/`muncode'_reg_14.dta"
	cap erase "$data/temp/`muncode'_reg_15.dta"
	cap erase "$data/temp/`muncode'_reg_16.dta"
	cap erase "$data/temp/`muncode'_reg_17.dta"

	}
}
********************************************************************************
* closing
********************************************************************************
{
cap log close
clear
}
